package com.yzq.api.aliyunai.model;

import cn.hutool.core.annotation.Alias;
import com.yzq.api.aliyunai.enums.ImageEditFunction;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * 图片编辑任务参数
 */
@Data
public class AliyunPictureEditTaskRequest implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    private String model = "wanx2.1-imageedit";
    /**
     * 任务输入参数
     */
    private Input input;
    /**
     * 任务参数
     */
    private Parameters parameters;

    @Data
    public static class Input implements Serializable {

        /**
         * 图片编辑功能
         */
        private String function;

        /**
         * 基础图片地址
         */
        @Alias("base_image_url")
        private String baseImageUrl;
        /**
         * 提示语
         */
        private String prompt;
    }

    @Data
    public static class Parameters implements Serializable {
        /**
         * 生成图片数量
         */
        private Integer n;

        /**
         * 随机数种子
         */
        private Integer seed;

        /**
         * 是否添加水印
         */
        private Boolean watermark;

        /**
         * 图像修改幅度 当function设置为 stylization_all（全局风格化）,description_edit（指令编辑）时填写
         */
        private Float strength;

        /**
         * 向上扩展比例，图像居中，默认值1.0，取值范围[1.0, 2.0]
         */
        @Alias("top_scale")
        private Float topScale;

        /**
         * 向下扩展比例，图像居中，默认值1.0，取值范围[1.0, 2.0]
         */
        @Alias("bottom_scale")
        private Float bottomScale;

        /**
         * 向左扩展比例，图像居中，默认值1.0，取值范围[1.0, 2.0]
         */
        @Alias("left_scale")
        private Float leftScale;

        /**
         * 向右扩展比例，图像居中，默认值1.0，取值范围[1.0, 2.0]
         */
        @Alias("right_scale")
        private Float rightScale;

        /**
         * 当function设置为super_resolution（图像超分）时才需填写。
         * 图像超分的放大倍数。在放大图像的同时增强细节，提升图像分辨率，实现高清处理。
         * 取值范围为1~4，默认值为1。当upscale_factor设置为1时，仅对图像进行高清处理，不进行放大。
         */
        @Alias("upscale_factor")
        private  Integer upscaleFactor;

        /**
         * 当function设置为doodle（线稿生图）时才需填写。
         * 输入图像是否为线稿图像。
         * false：默认值，输入图像不为线稿图像。模型会先从输入图像中提取线稿，再参考提取的线稿生成新的图像。
         * true：输入图像为线稿图像。模型将直接基于输入图像生成图像，适用于涂鸦作画场景。
         */
        @Alias("is_sketch")
        private Boolean isSketch;
    }

}
